import axios from 'axios'
import Vue from 'vue'
import { MessageBox, Message } from 'element-ui'
import { getToken } from '../auth/auth'
//创建实例
const instance = axios.create(config)
let config = {
  // 每次请求的协议、IP地址。  设置该配置后，每次请求路径都可以使用相对路径，例如"/admin/login"
  // baseURL: "http://106.39.147.114:45555/km",
  // baseURL: process.env.VUE_APP_BASE_API,
  // 请求超时时间
  timeout: 5000,
  // 每次请求携带cookie
  withCredentials: true
}
// 添加请求拦截器
instance.interceptors.request.use(function (config) {
  console.log(config.baseURL)
  // 在发送请求之前做些什么
  const token = getToken()
  if (token) {
    config.headers.token = token
  }
  return config;
}, function (error) {
  // 对请求错误做些什么
  Message({
    message: error || 'Error',
    type: 'error',
    dangerouslyUseHTMLString: true,
    duration: 5 * 1000
  })
  return Promise.reject(error);
});

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  const res = response.data
  const code = res.code
  const resultData = response.data.data;
  if (code !== 200) {
    // 5001: 请求参数校验异常
    if (code === 5001) {
      let errorMessage = ''
      if (resultData) {
        if (resultData instanceof Array) {
          const length = resultData.length
          resultData.forEach((item, index) => {
            console.log(index + '-' + item)
            errorMessage += item
            if (index !== (length - 1)) {
              errorMessage += "<br/><br/>"
            }
          })
        } else {
          errorMessage += resultData
        }
      } else {
        errorMessage = '请求参数校验异常'
      }
      Message({
        message: errorMessage || 'Error',
        type: 'error',
        dangerouslyUseHTMLString: true,
        duration: 5 * 1000
      })
    } else if (code === 50008 || code === 50012 || code === 50014) {
      // to re-login
      MessageBox.confirm('由于您长时间未操作，导致退出登录，您可以取消停留在此页面，或再次登录', '确认注销', {
        confirmButtonText: '重新登录',
        cancelButtonText: '注销',
        type: 'warning'
      })
      // .then(() => {
      //   store.dispatch('user/resetToken').then(() => {
      //     location.reload()
      //   })
      // })
    }
    else if (code === 5104) {
      Message({
        message: '账号或密码错误' || 'Error',
        type: 'error',
        duration: 5 * 1000
      })
    } else {
      if (!!res.code) {
        Message({
          message: res.message || 'Error',
          type: 'error',
          duration: 5 * 1000
        })
      }

    }
    Promise.reject(new Error(res.message || 'Error'))
    // 当状态码不是200时，是否需要返回响应结果给调用方
    return res
  } else {
    return res
  }
}, function (error) {
  // 对响应错误做点什么
  const code = error.response.data.code
  if (code === 5101) {
    Message({
      message: '业务处理异常' || 'Error',
      type: 'error',
      dangerouslyUseHTMLString: true,
      duration: 5 * 1000
    })
  } else if (code === 5102) {
    Message({
      message: '数据库处理异常' || 'Error',
      type: 'error',
      dangerouslyUseHTMLString: true,
      duration: 5 * 1000
    })
  } else if (code === 5103) {
    Message({
      message: '验证码校验异常' || 'Error',
      type: 'error',
      dangerouslyUseHTMLString: true,
      duration: 5 * 1000
    })
  } else if (code === 5104) {
    Message({
      message: '登录授权异常' || 'Error',
      type: 'error',
      dangerouslyUseHTMLString: true,
      duration: 5 * 1000
    })
  }
  else if (code === 5105 || code === 5106) {
    Message({
      message: '没有访问权限' || 'Error',
      type: 'error',
      dangerouslyUseHTMLString: true,
      duration: 5 * 1000
    })
  } else if (code === 5107) {
    Message({
      message: 'Token解析异常' || 'Error',
      type: 'error',
      dangerouslyUseHTMLString: true,
      duration: 5 * 1000
    })
  } else if (code === 5108) {
    Message({
      message: 'METHOD NOT SUPPORTED' || 'Error',
      type: 'error',
      dangerouslyUseHTMLString: true,
      duration: 5 * 1000
    })
  } else if (code === 5109) {
    Message({
      message: 'Token失效' || 'Error',
      type: 'error',
      dangerouslyUseHTMLString: true,
      duration: 5 * 1000
    })
  }
  return Promise.reject(error);
});
// instance.defaults.baseURL = "http://127.0.0.1:8888/api"
instance.defaults.baseURL = "http://192.168.40.200:9080/api"

export default instance;
// axios.defaults.baseURL = "http://106.39.147.114:45555/km"

// Vue.prototype.$request = axios